NC1 大数加法
https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475
最开始看到这题,不就类型转换吗?直接调包
func solve( s string , t string ) string {
a, _ := strconv.Atoi(s)
b, _ := strconv.Atoi(t)
return strconv.Itoa(a + b)
}
结果发现 AC 不过
用例输入 "9","99999999999999999999999999999999999999999999999999999999999994"
所以是无法直接转成 int 类型相加的,因此需要自己模拟加法
func solve(num1 string, num2 string) string {
result := ""
add := 0 // 进位的数值(最大为 1)
cur := 0 // 当前进位(进位后余下的值)
i, j := len(num1)-1, len(num2)-1 // 记录所在位的指针(因为是从末尾开始计数,所以要使用双指针)
// 每次循环处理一位
for i >= 0 || j >= 0 || add != 0 {
// 计算当前位
if i < 0 && j >= 0 { // num1 已经加完了,num2 还有
cur = int(num2[j] - '0') + add
} else if j < 0 && i >= 0 { // 与上面的情况相反
cur = int(num1[i] - '0') + add
} else if i < 0 && j < 0 { // 都算完了
cur = add
} else { // 都还没有算完
cur = int(num1[i] - '0' + num2[j] - '0') + add
}
if cur > 9 {
add = cur / 10
cur -= 10
} else {
add = 0
}
result = string(cur + '0') + result
i--
j--
}
return result
}